package com.atguigu.lease.common.convert;

import com.atguigu.lease.model.base.BaseTypeEnum;
import org.springframework.core.convert.converter.Converter;
import org.springframework.core.convert.converter.ConverterFactory;
import org.springframework.stereotype.Component;

/*
    转换器工厂：
        可以根据ConverterFactory的第二个泛型 扫描它所有的实现类 并创建转换器注入到容器中
 */
@Component
public class BaseTypeEnumConverterFactory implements ConverterFactory<String, BaseTypeEnum> {
    //T 表示BaseTypeEnum 的实现类类型
    // targetType表示T的class对象
    @Override
    public <T extends BaseTypeEnum> Converter<String, T> getConverter(Class<T> targetType) {
        return new Converter<String, T>() {
            @Override
            public T convert(String source) {
                //获取T类型所有的对象
                for (T typeEnum : targetType.getEnumConstants()) {
                    if (typeEnum.getCode().toString().equals(source)) {
                        return typeEnum;
                    }

                }
                return null;
            }
        };
    }
}
